using System;
using System.Collections.Generic;
using UD.GRAL.Entity;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data.Common;
using System.Data;
using UD.Utilities.Exceptions;

namespace UD.GRAL.DataAccess
{
    public class FacultadUDDAL : GeneralDAL
    {
        public FacultadUDDAL()
        {
        }
        public int InsertarFacultadUD(FacultadUD pFacultadUD)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_FacultadUD_Insertar"))
                {
                    int vResultado;
                    vDataBase.AddOutParameter(vDbCommand, "@IdFacultad", DbType.Int32, 18);
                    vDataBase.AddInParameter(vDbCommand, "@CodFacultad", DbType.String, pFacultadUD.CodFacultad);
                    vDataBase.AddInParameter(vDbCommand, "@NombreFacultad", DbType.String, pFacultadUD.NombreFacultad);
                    vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pFacultadUD.Estado);
                    vDataBase.AddInParameter(vDbCommand, "@UsuarioCrea", DbType.String, pFacultadUD.UsuarioCrea);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    pFacultadUD.IdFacultad = Convert.ToInt32(vDataBase.GetParameterValue(vDbCommand, "@IdFacultad").ToString());
                    GenerarLogAuditoria(pFacultadUD, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }
        public int ModificarFacultadUD(FacultadUD pFacultadUD)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_FacultadUD_Modificar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdFacultad", DbType.Int32, pFacultadUD.IdFacultad);
                    vDataBase.AddInParameter(vDbCommand, "@CodFacultad", DbType.String, pFacultadUD.CodFacultad);
                    vDataBase.AddInParameter(vDbCommand, "@NombreFacultad", DbType.String, pFacultadUD.NombreFacultad);
                    vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pFacultadUD.Estado);
                    vDataBase.AddInParameter(vDbCommand, "@UsuarioModifica", DbType.String, pFacultadUD.UsuarioModifica);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pFacultadUD, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }
        public int EliminarFacultadUD(FacultadUD pFacultadUD)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_FacultadUD_Eliminar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdFacultad", DbType.Int32, pFacultadUD.IdFacultad);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pFacultadUD, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }


        public FacultadUD ConsultarFacultadUD(int pIdFacultad)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_FacultadUD_Consultar"))
                {
                    vDataBase.AddInParameter(vDbCommand, "@IdFacultad", DbType.Int32, pIdFacultad);
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        FacultadUD vFacultadUD = new FacultadUD();
                        while (vDataReaderResults.Read())
                        {
                            vFacultadUD.IdFacultad = vDataReaderResults["IdFacultad"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdFacultad"].ToString()) : vFacultadUD.IdFacultad;
                            vFacultadUD.CodFacultad = vDataReaderResults["CodFacultad"] != DBNull.Value ? Convert.ToString(vDataReaderResults["CodFacultad"].ToString()) : vFacultadUD.CodFacultad;
                            vFacultadUD.NombreFacultad = vDataReaderResults["NombreFacultad"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreFacultad"].ToString()) : vFacultadUD.NombreFacultad;
                            vFacultadUD.Estado = vDataReaderResults["Estado"] != DBNull.Value ? Convert.ToBoolean(vDataReaderResults["Estado"].ToString()) : vFacultadUD.Estado;
                            vFacultadUD.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vFacultadUD.UsuarioCrea;
                            vFacultadUD.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vFacultadUD.FechaCrea;
                            vFacultadUD.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vFacultadUD.UsuarioModifica;
                            vFacultadUD.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vFacultadUD.FechaModifica;
                        }
                        return vFacultadUD;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }

        public List<FacultadUD> ConsultarFacultadUDs(String pCodFacultad, String pNombreFacultad, Boolean? pEstado)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_FacultadUDs_Consultar"))
                {
                    if(pCodFacultad != null)
                         vDataBase.AddInParameter(vDbCommand, "@CodFacultad", DbType.String, pCodFacultad);
                    if(pNombreFacultad != null)
                         vDataBase.AddInParameter(vDbCommand, "@NombreFacultad", DbType.String, pNombreFacultad);
                    if(pEstado != null)
                         vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pEstado);
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        List<FacultadUD> vListaFacultadUD = new List<FacultadUD>();
                        while (vDataReaderResults.Read())
                        {
                                FacultadUD vFacultadUD = new FacultadUD();
                            vFacultadUD.IdFacultad = vDataReaderResults["IdFacultad"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdFacultad"].ToString()) : vFacultadUD.IdFacultad;
                            vFacultadUD.CodFacultad = vDataReaderResults["CodFacultad"] != DBNull.Value ? Convert.ToString(vDataReaderResults["CodFacultad"].ToString()) : vFacultadUD.CodFacultad;
                            vFacultadUD.NombreFacultad = vDataReaderResults["NombreFacultad"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreFacultad"].ToString()) : vFacultadUD.NombreFacultad;
                            vFacultadUD.Estado = vDataReaderResults["Estado"] != DBNull.Value ? Convert.ToBoolean(vDataReaderResults["Estado"].ToString()) : vFacultadUD.Estado;
                            vFacultadUD.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vFacultadUD.UsuarioCrea;
                            vFacultadUD.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vFacultadUD.FechaCrea;
                            vFacultadUD.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vFacultadUD.UsuarioModifica;
                            vFacultadUD.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vFacultadUD.FechaModifica;
                                vListaFacultadUD.Add(vFacultadUD);
                        }
                        return vListaFacultadUD;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }
    }
}
